#ifndef LOCAL_H_INCLUDED
#define LOCAL_H_INCLUDED

#include "pedido.h"

class Local{
    public:

        Local();
        Local(const Lista< pair <Bebida,Cantidad> > bs, const Lista< pair <Hamburguesa,Cantidad> > hs, const Lista<Empleado> es);

        Cantidad            stockBebidasL(const Bebida b);
        Cantidad            stockSandwichesL(const Hamburguesa h);
        Lista<Bebida>       bebidasDelLocalL();
        Lista<Hamburguesa>  sandwichesDelLocalL();
        Lista<Empleado>     empleadosL();
        Lista<Empleado>     desempleadosL();
        Energia             energiaEmpleadoL(const Empleado e);
        Lista<Pedido>       ventasL();
        bool                unaVentaCadaUnoL();
        void                venderL(const Pedido p);
        Lista<Empleado>     candidatosAEmpleadosDelMesL();
        void                sancionL(const Empleado e, const Energia n);
        Empleado            elVagonetaL();
        void                anularPedidoL(int n);
        void                agregarComboAlPedidoL(const Combo c, int n);


        void mostrar(std::ostream& os) const;
		void guardar(std::ostream& os) const;
		void cargar (std::istream& is);


    private:
        Lista< pair <Hamburguesa,Cantidad> > _sandwiches;
        Lista< pair <Bebida,Cantidad> >      _bebidas;
        Lista< pair <Empleado, Energia> >    _empleados;
        Lista< Pedido >                      _ventas;

        enum {ENCABEZADO_ARCHIVO = 'L'};
				//Auxiliares
				Lista<Empleado> empleadosQueVendieron();
				Lista<Empleado> primerasApariciones(Lista<Empleado> listaEmpleados);
				bool esPrefijo(Lista<Empleado> prefijo, Lista<Empleado> listaEmpleados);
				void leSacoNelementos(int n, Lista<Empleado>& listaEmpleados);
				int cantidadBebidaEnElPedido(Bebida, const Pedido);
				int cantidadSangucheEnElPedido(Hamburguesa h, const Pedido p);
				int energiaQuePerdio(Empleado e, const Pedido p);
				int beta(bool b);
				int miraEmpleadoRestaEnergia(Empleado emp, int n, const Combo c);
                int maximoDeCombosVendidos();
                int cantidadDeCombosQueVendio(const Empleado e);
                Lista<Empleado> empleadosQueMasPedidosVendieron();
                int  maximoDePedidosVendidos();
                int  elMaximoDe(const int a,const int b);
                int  miraEmpleadoSumaEnergia(Empleado emp, int n);
                Pedido cambiarSoloNumeroP (const Pedido& p,const int n);
                int descansoMaximo(Empleado empleado);
                Lista < int > descansos(Empleado empleado);
};
#endif // LOCAL_H_INCLUDED
std::ostream & operator<<(std::ostream & os,const Local & c);
